#pragma once

#include "Common.h"

void ClearHistoryTable(SEngineData* ed);

template<typename BB> void IncrementMove(SEngineData* ed, BB* bbBoard, BB* bbMove, bool bWhite, int bonus);
template<> void IncrementMove<BitBoard>(SEngineData* ed, BitBoard* bbBoard, BitBoard* bbMove, bool bWhite, int bonus);
template<> void IncrementMove<BitBoard64>(SEngineData* ed, BitBoard64* bbBoard, BitBoard64* bbMove, bool bWhite, int bonus);

template<typename BB> void HistoryUpdateScore(SEngineData* ed, BB* bbBoard, BB* bbMoveList, int count, bool bWhite);
template<> void HistoryUpdateScore<BitBoard>(SEngineData* ed, BitBoard* bbBoard, BitBoard* bbMoveList, int count, bool bWhite);
template<> void HistoryUpdateScore<BitBoard64>(SEngineData* ed, BitBoard64* bbBoard, BitBoard64* bbMoveList, int count, bool bWhite);

void HistoryTableDoAge(SEngineData* ed);
